package com.wcpdoc.exam.core.service;

import com.wcpdoc.core.entity.PageResult;
import com.wcpdoc.core.service.BaseService;
import com.wcpdoc.exam.core.entity.Exam;
import com.wcpdoc.exam.core.entity.MyExamMock;
import com.wcpdoc.exam.core.entity.ex.ExamMockInfo;

import java.util.List;

/**
 * 我的模拟考试服务层接口
 * 
 * v1.0 lz
 */
public interface MyExamMockService extends BaseService<MyExamMock>{

	/**
	 * 获取我的考试列表
	 * 
	 * @param examId
	 * @return List<MyExamMock>
	 */
	List<MyExamMock> getList(Integer examId);
	
	/**
	 * 获取我的考试列表
	 * 
	 * @param userId
	 * @return List<MyExamMock>
	 */
	List<MyExamMock> getListForUser(Integer userId);
	
	/**
	 * 获取我的考试列表
	 * 
	 * @param examId
	 * @param userId
	 * @return MyExamMock
	 */
	MyExamMock getMyExamMock(Integer examId, Integer userId);
	
	/**
	 * 答题
	 * 由原参数myQuestionId改成examId questionId userId，从接口层面保证字段的好理解
	 * 
	 * @param examId
	 * @param questionId 
	 * @param userId 
	 * @param answers
	 * void
	 */
	void answerUpdate(Integer examId, Integer userId, Integer questionId, String[] answers);
	
	/**
	 * 完成交卷
	 * 
	 * 由原参数mymyExamId改成examId questionId userId，从接口层面保证字段的好理解
	 * 
	 * @param examId 
	 * @param userId 
	 * void
	 */
	void finish(Integer examId, Integer userId);
	
	/**
	 * 完成阅卷
	 * 
	 * @param examId
	 * void
	 */
	void doExam(Integer examId);

	/**
	 * 完成阅卷
	 * 
	 * @param examId
	 * void
	 */
//	void doMark(Integer examId);

	/**
	 * 获取考试列表
	 * 
	 * @param userId
	 * @return List<Exam>
	 */
//	List<Exam> getExamList(Integer userId);

	/**
	 * 我的考试清空
	 * 
	 * @param examId void
	 */
	void clear(Integer examId);

	/**
	 * 开始考试
	 * @param examId
	 * @param id
	 */
	void startExam(Integer examId, Integer id);

	/**
	 * 考试发布
	 *
	 * @param examInfo
	 * @param processBarId
	 * void
	 */
	void publish(ExamMockInfo examInfo, String processBarId);

	/**
	 * 查看是否有未交卷的
	 *
	 */
	MyExamMock examUnStart(Integer userId);

	/**
	 * 是否存在正在进行的模拟考试
	 * @param userId
	 * @return
	 */
	PageResult hasJxMockExam(Integer userId);

	/**
	 * 超时未提交的模拟考试
	 */
    void endOverExam();

	/**
	 * 自动生产模拟考试题
	 */
	Integer genPaper();

	/**
	 * 删除模拟考试,同时删除试卷
	 */
	void delExamMockById(Integer examId);
}
